package com.elem.dao.impl;

import com.elem.bean.User;
import com.elem.dao.UserDao;
import com.elem.util.DruidUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class UserDaoImpl implements UserDao {
    // 创建JdbcTemplate对象，既连接数据库必要的操作，Dao主要是与数据库进行交汇
    JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());

    @Override
    public User getUserById(String userId) throws Exception {
        try {
//            获得从UserServiceImpl层传来的数据userId
            String sql = "select * from user where userId = ?";
//            第一个传输sql语句，即获得userId(手机号)，第二个参数是userId，即检查userId是否有数据，有代表存在，没有代表不存在
            User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), userId);
            return user;// 当存在数据是就会返回数据，不存在就会有异常
        } catch (DataAccessException e) {
            return null;// 说明不存在
        }
    }

    @Override
    public User getUserByIdByPass(String userId, String password) throws Exception {
        try {
//            获取数据库的数据，检验是否为注册过的用户(登录请求)
            //            获得从UserServiceImpl层传来的数据userId，password
            String sql = "select * from user where userId = ? and password = ?";
            User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), userId,password);
            return user;
        } catch (DataAccessException e) {
            return null;
        }
    }

    @Override
    public int saveUser(User user) throws Exception {
        String sql = "insert into user(userId,password,userName,userSex) values(?,?,?,?)";
//        将得到的数据插入到jdbcTemplate（数据库）同时由于是封装的，所以需要getxx获取
        int row = jdbcTemplate.update(sql, user.getUserId(), user.getPassword(), user.getUserName(), user.getUserSex());
        return row;//影响的行数  返回1代表添加成功 0代表添加失败
    }
}
